[update] AWS Elemental MediaConnectにsource stream monitoring機能が追加されました
はじめに
清水です。AWS Media Servicesの細かなアップデートを押さえておこうのコーナー、本エントリでは2024/06/19付けでWhat's New at AWSに投稿された、AWS Elemental MediaConnectの以下アップデートについてお届けします。
高品質で信頼性と安全性に優れたライブ動画伝送サービスであるAWS Elemental MediaConnectで、Flowに入力されたトランスポートストリームならびにそのプログラムメディアに関する情報が提供されるようになりました。 Source stream monitoring もしくは Source metadata monitoring と名付けられています。トラブル発生時の原因特定や解決に利用でき、またライブブロードキャストの中断を最小限に抑えるの役立ちます。
上記の通りWhat's New at AWSへの投稿は2024/06/19付けで、AWS Elemental MediaConnect User GuideのDocument history for user guideにも2024/06/18付けの更新があります。ただ2024/03/08ならびに2023/12/22にもSource stream monitoring関連の更新がありました。
引用元: Document history for user guide - AWS Elemental MediaConnect
API関連の更新についても確認してみます。Source stream monitoring機能で使用すのはDescribeFlowSourceMetadata
API、AWS CLIではのdescribe-flow-source-metadata
サブコマンドです。AWS CLIでは2023/12/23付けのVersion 1.32.7の更新でThis release adds the DescribeSourceMetadata API.
という項目が確認できました。
APIについては外部サイトですがAWS API Changesにて、2023/12/22付けでDescribeFlowSourceMetadata
というAPIが追加されたことが確認できます。
今回のアップデートであるSource stream monitoring機能、もしかしたら以前から(ひっそりと?)APIでの利用やマネジメントコンソールでの表示が可能で、改めて機能の更新や追加などしつつWhat's New at AWSに掲載されたのかもしれません。
本エントリでは、このSource stream monitoring(Source metadata monitoring)機能について、実際にMediaConnect Flowを稼働させた際に参照できる内容をマネジメントコンソールやAWS CLIから確認してみました。
Source stream monitoringをマネジメントコンソールから使ってみた
それでは実際にMediaConnect Flowリソースを準備、映像伝送を行った状態でSoruce stream monitoringでどのような情報が参照できるのか確認してみます。検証用リソースの作成からはじめます。
検証用リソース準備とSource metadata項目の確認
まずはMediaConnectのFlowリソースを作成します。Sourceのプロトコルについて、今回はRTPを使用しました。なお、MediaConnect Flowへの入力にはMediaLiveのRTP Outputを使用します。以下のブログエントリと同様の構成です。
MediaLiveリソースが2回でてきて少し混乱しやすいので、構成図についても記載しておきます。
MediaConnect Flowの作成とSource metadata項目の確認
以下の設定でMediaConnect Flowを作成しました。Allowlist CIDR blockについては入力となるMediaLive側リソースに合わせて適宜変更します。
作成後、マネジメントコンソールのFlowリソース詳細画面を確認してみましょう。 Source metadata という項目がありますね。ここからSource streamを確認することができます。
Source metadataタブを開いてみます。この時点ではまだFlowをStartしていない状態ですので、以下のように Start this flow to see source metadata という表示があるのみでした。
RTP OutputなMediaLiveリソースの作成
続いて、このMediaConnect Flowへの入力となるMediaLive Output(RTP OutputなMediaLive Channel)を作成します。詳細な手順は先ほどのブログエントリをご確認ください。ポイントとしては以下となります。
- MediaLive側の入力としてはRTMP (push)を使用
- Channel作成の際、OutputでUDPを選択
- UDP destinationsは
rtp://[MediaConnect SourceのInbound IP address]:5432
- UDP destinationsは
- MediaLive Channel作成後のEgress endpointのSource IPを、MediaConnectのFlow側の許可IPアドレスに指定
なお、UDP Outputの設定について、参考にしているブログエントリ内では解像度とコーデックを指定していました。本エントリでは この段階では解像度、コーデックなどOutputの設定は行っていません。 (のちほど、少し設定変更して確認を行います。)
MediaConnectをInputとするMediaLiveリソースの作成
RTP OutputなMediaLive Channelが作成できたら、続いてMediaConnectをInputとするMediaLiveリソースを作成します。こちらも詳細な手順は先ほどのブログエントリをご確認ください。
変更点として、WorkflowのInput typeでMediaConnectを選択し既存のMediaConnect Flowリソースを指定する、という手順だとなぜかこのリソースの作成に失敗してしまう、ということがありました。原因の深追いなどはしておりませんが、取り急ぎ回避策として、あらかじめこのMediaConnect Flowを入力としたMediaLive Inputを作成、Workflow wizardのInputの選択ではこの作成済みのInputを使用することとしました。
なおこのWorkflow wizardで作成したリソース1式については、MediaConnectからの出力、伝送された映像の視聴確認に使用します。MediaPackage HLS endpointのPreview playerのリンク先で映像を確認しました。
映像伝送時のSource stream monitoringの確認
検証用リソースが準備できました。それでは実際に映像伝送を行い、Source stream monitoringでどのような情報が参照できるのか確認していきます。
MediaConnect FlowのみStart
まずは作成した検証リソースのうち、MediaConnect FlowのみStartさせActive Statusにしてみます。この状態で先ほどと同様に、マネジメントコンソールのFlowリソース詳細画面からSource metadataの項目を確認してみます。以下のように Latest change to source metadata の情報のみ更新されました。また Program information is not available という表示も確認できますね。
MediaLive ChannelをStart、映像伝送を開始
続いて、MediaConnectへのInputならびにOutputとなる2つのMediaLive ChannelもStartさせRunningのStatusにします。またStreamig Software(今回はOBS Studioを使用しました)から映像をMediaLive Channelへ打ち上げます。これで、MediaLive → MediaConnect → MediaLiveなかたちで映像伝送が開始されました。この状態でSource stream monitoringを確認してみましょう。Program - PID 408 の項目が追加されています。
[Expand all programs]ボタンですべての項目を展開してみます。Videoのコーデックやフレームレートや解像度などの情報、またAudioについてもコーデックやサンプルレートなどの情報が確認できますね。ID3に付いての情報や、各StreamのPIDなども確認できます。
なお、VideoやAudioのコーデック、解像度やフレームレート、サンプルレートなどの情報は映像打ち上げ元のStreaming Softwareの設定と一致しています。(その後にMediaLiveが入りますが、Outputについての設定を行っていないのでパススルーされている認識です。)
伝送している映像の設定を変更してSource metadataを確認
続いてMediaConnectにRTP Outputを行っているMediaLive ChannelならびにStreamig Softwareからの映像の打ち上げを一旦停止し、RTP Outputの設定をいくつか変更してみます。
MediaLive ChannelのUDP Output、Stream settingsのVideoの項目を変更します。具体的には以下を設定しました。設定前はいずれも設定値なしでMediaLiveへの入力映像の設定がそのまま使われていた状態です。
- 解像度を1920x1080に
- Widthに
1920
、Heightに1080
を指定
- Widthに
- コーデックをH.265/HEVCに
- Codec Settingsで
H265
を選択
- Codec Settingsで
- Frame rateを 23.976fpsに
- Framerate Numeratorに
24000
、Framerate Denominatorに1001
を指定
- Framerate Numeratorに
またOutput settingsのNetwork Settingsの項目のうち、PID Settingsで以下のように設定を行いました。(なお、筆者はPID(packet identifier)について疎く、MediaConnect source stream monitoringでの確認のみに用途を絞って変更を行っています。設定している値自体の整合性といった点は確認できておりません。)
- Video PIDを
481
から483
に変更 - Auido PIDsを
482-498
から492-498
に変更
またMediaConnectで伝送する映像がH.265/HEVCになるため、後続のMediaLive(MediaConnectをInputとするMediaLive)のInput specificatiomnsでInput codecをHEVCに変更しておきます。
映像伝送を再開し、Source stream monitoringを確認してみます。RTP OutputなMediaLiveで変更した値どおりに、Videoのコーデック、フレームレート、解像度が変更されていますね。(フレームレートについては四捨五入されています。)またVideoとAudio、それぞれのPIDもMediaLive側で変更したとおりの値となっていることが確認できます。
Source stream monitoringをAWS CLIからも使ってみた
実際にMediaConnectで映像伝送を行っている際にSource stream monitoringで参照できる情報をマネジメントコンソールから確認してみました。このSoruce stream monitoring、冒頭で述べた通りAPIからも情報が取得できます。今回はAWS CLIのaws mediatailro describe-flow-source-metadata
を使って情報を参照してみました。
AWS CLIの実行はAWS CloudShell上から行いました。以下の環境となります。
[cloudshell-user@ip-10-132-69-4 ~]$ aws --version
aws-cli/2.17.10 Python/3.11.8 Linux/6.1.96-102.177.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
aws mediatailro describe-flow-source-metadataの書式
まずはdescribe-flow-source-metadata
サブコマンドの書式について確認しておきましょう。以下がAWS CLI Command Referenceです。
- describe-flow-source-metadata — AWS CLI 1.33.26 Command Reference
- describe-flow-source-metadata — AWS CLI 2.17.13 Command Reference
書式は以下のようになります。引数としてSource streamを参照するMediaConnect FlowのARNを指定します。
$ aws mediaconnect describe-flow-source-metadata \
--flow-arn <value>
FlowをStartさせる前のレスポンス
まずはFlowリソース作成直後、Startさせていない状態のレスポンスを確認してみました。マネジメントコンソールで確認したときと同様、FlowをStartさせてACTIVEにしないと情報が表示できな旨のエラーが返りました。
[cloudshell-user@ip-10-132-69-4 ~]$ aws mediaconnect describe-flow-source-metadata \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-C1xxxxxxxxxxxxxxxxxxxxxxxxx7b:mediaconnect-rtp-source-flow
An error occurred (BadRequestException) when calling the DescribeFlowSourceMetadata operation: Bad request: The flow must be in ACTIVE state to perform this action
FlowをStartさせた直後のレスポンス
続いてFlowをStartさせActive Statusにした直後、映像の入力がない状態です。こちらも先ほどマネジメントコンソールで確認したときと同様、Timestamp
の記録のみ値が返りました。その他の情報はまだない状態ですね。
映像を入力する前です。
[cloudshell-user@ip-10-132-69-4 ~]$ aws mediaconnect describe-flow-source-metadata \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-C1xxxxxxxxxxxxxxxxxxxxxxxxx7b:mediaconnect-rtp-source-flow
{
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-C1xxxxxxxxxxxxxxxxxxxxxxxxx7b:mediaconnect-rtp-source-flow",
"Messages": [],
"Timestamp": "2024-07-17T09:12:56.811000+00:00",
"TransportMediaInfo": {
"Programs": []
}
}
映像伝送を開始したあとのSource streamの情報
実際に映像伝送を開始する前、2つパターンのレスポンスを確認してきましたが、いよいよ本題の映像伝送時のレスポンスの確認です。以下のように、マネジメントコンソールで確認した情報と同様のものがAWS CLIから参照できました。
[cloudshell-user@ip-10-132-69-4 ~]$ aws mediaconnect describe-flow-source-metadata \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-C1xxxxxxxxxxxxxxxxxxxxxxxxx7b:mediaconnect-rtp-source-flow
{
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-C1xxxxxxxxxxxxxxxxxxxxxxxxx7b:mediaconnect-rtp-source-flow",
"Messages": [],
"Timestamp": "2024-07-17T09:21:52.812000+00:00",
"TransportMediaInfo": {
"Programs": [
{
"PcrPid": 481,
"ProgramNumber": 1,
"ProgramPid": 480,
"Streams": [
{
"Codec": "H264",
"FrameRate": "30",
"FrameResolution": {
"FrameHeight": 720,
"FrameWidth": 1280
},
"Pid": 481,
"StreamType": "Video"
},
{
"Channels": 2,
"Codec": "AAC",
"Pid": 482,
"SampleRate": 48000,
"SampleSize": 16,
"StreamType": "Audio"
},
{
"Codec": "ID3",
"Pid": 502,
"StreamType": "Data"
}
]
}
]
}
}
伝送している映像の設定を変更したあとのSource stream情報
マネジメントコンソールで確認したときと同じように、伝送している映像の設定を変更したあとのaws mediaconnect describe-flow-source-metadata
サブコマンドの出力についても確認してみましょう。解像度を1920x1080、コーデックをH.265/HEVC、Frame rateを23.976fps、そしてPIDについても変更しました。変更した内容がdescribe-flow-source-metadata
コマンドのレスポンスでも確認できますね。
[cloudshell-user@ip-10-132-69-4 ~]$ aws mediaconnect describe-flow-source-metadata \
> --flow-arn arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-C1xxxxxxxxxxxxxxxxxxxxxxxxx7b:mediaconnect-rtp-source-flow
{
"FlowArn": "arn:aws:mediaconnect:ap-northeast-1:123456789012:flow:1-C1xxxxxxxxxxxxxxxxxxxxxxxxx7b:mediaconnect-rtp-source-flow",
"Messages": [],
"Timestamp": "2024-07-17T09:36:16.812000+00:00",
"TransportMediaInfo": {
"Programs": [
{
"PcrPid": 483,
"ProgramNumber": 1,
"ProgramPid": 480,
"Streams": [
{
"Codec": "H265",
"FrameRate": "23.98",
"FrameResolution": {
"FrameHeight": 1080,
"FrameWidth": 1920
},
"Pid": 483,
"StreamType": "Video"
},
{
"Channels": 2,
"Codec": "AAC",
"Pid": 492,
"SampleRate": 48000,
"SampleSize": 16,
"StreamType": "Audio"
},
{
"Codec": "ID3",
"Pid": 502,
"StreamType": "Data"
}
]
}
]
}
}
まとめ
AWS Elemental MediaConnectのSource stream monitoring機能をマネジメントコンソールとAWS CLIから使ってみました。MediaConnectに入力している映像や音声のコーデック、解像度、フレームレート、サンプルレート、そしてPIDなどの情報が参照できます。映像伝送でトラブルなどが生じた際、Source stream monitoringを利用することで入力映像側で意図しない設定をしてしまっていないか、という確認が容易に行えるかと思います。積極的に活用していきたい機能だと思いました。